package com.imooc.pan.storage.engine.core;

import com.imooc.pan.storage.engine.core.context.*;

import java.io.IOException;

/**
 * @Description:   文件存储引擎模块的顶级接口
 *                  该接口定义所有需要向外暴露给业务层面的相关文件操作的功能
 *                  业务方只能调用该接口的方法，而不能直接使用具体的实现方案去做业务调用
 * @Author: 张广焱
 * @Date: 2024-11-07 17:20
 */
public interface StorageEngine {

    /**
     * @Description: 存储物理文件
     * @Author: 张广焱
     * @Date: 2024-11-08  14:10:12
     */
    void store(StoreFileContext context) throws IOException;

    /**
     * @Description: 删除事务文件
     * @Author: 张广焱
     * @Date: 2024-11-08  14:10:54
     */
    void delete(DeleteFileContext context) throws IOException;

    /**
     * @param context
     * @Description: 存储物理文件的分片
     * @Author: 张广焱
     * @Date: 2024-11-11  17:09:09
     */
    void storeChunk(StoreFileChunkContext context) throws IOException;

    void mergeFile(MergeFileContext mergeFileContext) throws IOException;;

    void doReadFile(ReadFileContext context) throws IOException;;
}
